## Show that llvm-sizes works correctly on a typical ELF input for sysv
## format. It also shows that the formatting is correct.

## FIXME: The rules demonstrated by this test are not quite what GNU size
## follows. See https://bugs.llvm.org/show_bug.cgi?id=42934.

# RUN: yaml2obj %s -o %t.o
# RUN: llvm-size --format=sysv %t.o \
# RUN:   | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}
# RUN: llvm-size -A %t.o \
# RUN:   | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}

#      CHECK:[[FILE]]  :
# CHECK-NEXT:section               size      addr
# CHECK-NEXT:.progbits                1   2097152
# CHECK-NEXT:.symtab_shndx            4    524288
# CHECK-NEXT:.hash                   64     65536
# CHECK-NEXT:.dynamic               128     32768
# CHECK-NEXT:.note                  256     16384
# CHECK-NEXT:.nobits                512      8192
# CHECK-NEXT:.shlib                2048      2048
# CHECK-NEXT:.dynsym               4096      1024
# CHECK-NEXT:.init_array           8192       512
# CHECK-NEXT:.fini_array          16384       256
# CHECK-NEXT:.preinit_array       32768       128
# CHECK-NEXT:.group               65536        64
# CHECK-NEXT:.relr               131072        32
# CHECK-NEXT:.os_specific        262144        16
# CHECK-NEXT:.proc_specific      524288         8
# CHECK-NEXT:.user_specific     1048576         4
# CHECK-NEXT:Total              2096069

!ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name:    .progbits
    Type:    SHT_PROGBITS
    ShSize:  0x1
    Address: 0x200000
  - Name:    .strtab
    Type:    SHT_STRTAB
    ShSize:  0x2
    Address: 0x100000
  - Name:    .symtab_shndx
    Link:    .symtab
    Type:    SHT_SYMTAB_SHNDX
    ShSize:  0x4
    Address: 0x80000
    Entries:
  - Name:    .symtab
    Type:    SHT_SYMTAB
    ## .symtab's size has to be based on .symtab_shndx's size, hence the
    ## size not following the pattern of the other sections.
    ShSize:  0x18
    Address: 0x40000
  - Name:    .rela
    Type:    SHT_RELA
    ShSize:  0x20
    Address: 0x20000
  - Name:    .hash
    Type:    SHT_HASH
    Content: ''
    ShSize:  0x40
    Address: 0x10000
  - Name:    .dynamic
    Type:    SHT_DYNAMIC
    ShSize:  0x80
    Address: 0x8000
  - Name:    .note
    Type:    SHT_NOTE
    ShSize:  0x100
    Address: 0x4000
    Notes:   []
  - Name:    .nobits
    Type:    SHT_NOBITS
    ShSize:  0x200
    Address: 0x2000
  - Name:    .rel
    Type:    SHT_REL
    ShSize:  0x400
    Address: 0x1000
  - Name:    .shlib
    Type:    SHT_SHLIB
    ShSize:  0x800
    Address: 0x800
  - Name:    .dynsym
    Type:    SHT_DYNSYM
    ShSize:  0x1000
    Address: 0x400
  - Name:    .init_array
    Type:    SHT_INIT_ARRAY
    ShSize:  0x2000
    Address: 0x200
  - Name:    .fini_array
    Type:    SHT_FINI_ARRAY
    ShSize:  0x4000
    Address: 0x100
  - Name:    .preinit_array
    Type:    SHT_PREINIT_ARRAY
    ShSize:  0x8000
    Address: 0x80
  - Name:    .group
    Type:    SHT_GROUP
    ShSize:  0x10000
    Address: 0x40
    Info:    0
    Members:
  - Name:    .relr
    Type:    SHT_RELR
    ShSize:  0x20000
    Address: 0x20
  - Name:    .os_specific
    Type:    0x61234567
    ShSize:  0x40000
    Address: 0x10
  - Name:    .proc_specific
    Type:    0x71234567
    ShSize:  0x80000
    Address: 0x8
  - Name:    .user_specific
    Type:    0x81234567
    ShSize:  0x100000
    Address: 0x4
  - Name:    .null
    Type:    SHT_NULL
    ShSize:  0x200000
    Address: 0x2
